/**
 * 
 */
package net.looker.data;

import java.util.Date;

import net.looker.monitor.disposer.MediaDisposer;
import net.looker.util.URLUtils;


/**
 * 新闻正文中媒体对象
 * 可以代表图片，视频，声音，文档等。。
 * 存放在数据库media中
 * @author solosky
 *
 */
public class Media
{
	
	/**
	 * 文件类型枚举变量
	 */
	public static enum  ETYPE {i,v,a,d,z,o }
	
	/**
	 * 文件HASH
	 */
	private String mediaHash;
	
	/**
	 * 文件地址
	 */
	private String url;
	/**
	 * 原始URL地址
	 */
	private String original;
	
	/**
	 * 文件简单说明
	 */
	private String title;
	
	/**
	 * 文件名
	 */
	private String name;
	
	/**
	 * 文件扩展名
	 */
	private String ext;
	/**
	 * 保存目录
	 * 这里只是相对于全局设置的文件保存路径  looker.media.saveDir
	 */
	private String saveDir;
	
	/**
	 * 文件标签
	 */
	private String tag;
	
	/**
	 * 文件下载时间
	 */
	private Date date;
	
	/**
	 * 文件大小
	 */
	private int size;
	/**
	 * 文件类型
	 */
	private ETYPE type;
	
	
	/**
	 * 下载过程中是否发生错误
	 */
	private boolean error;;
	
	
	/**
	 * 构造函数
	 */
	public Media()
	{
		this.error = false;
		this.date  = new Date();
	}
	
	/**
	 * 构造函数
	 * @param url      地址
	 * @param title    标题
	 * @param original 原始URL
	 */
	public Media(String url,String title,String original)
	{
		this.url      = url;
		this.original = original;
		this.title    = title;
		this.error    = false;
		this.mediaHash = URLUtils.hash(url);
		this.name     = URLUtils.file(url);
		this.ext      = MediaDisposer.fileExt(name);
		this.type     = MediaDisposer.fileType(ext);
		
	}

	/**
	 * 返回绝对路径
	 * @return
	 */
	public String getAbsPath()
	{
		return saveDir+'/'+date.getTime()+'_'+name;
	}

	/**
	 * @return the date
	 */
	public Date getDate()
	{
		return date;
	}
	
	/**
	 * @return the ext
	 */
	public String getExt()
	{
		return ext;
	}

	public String getMediaHash()
	{
		return mediaHash;
	}

	/**
	 * @return the filename
	 */
	public String getName()
	{
		return name;
	}

	/**
	 * @return the original
	 */
	public String getOriginal() {
		return original;
	}

	/**
	 * @return the saveDir
	 */
	public String getSaveDir() {
		return saveDir;
	}
	/**
	 * @return the size
	 */
	public int getSize()
	{
		return size;
	}

	/**
	 * @return the tag
	 */
	public String getTag()
	{
		return tag;
	}

	/**
	 * @return the title
	 */
	public String getTitle()
	{
		return title;
	}

	/**
	 * @return the type
	 */
	public ETYPE getType()
	{
		return type;
	}	
	/**
	 * @return the url
	 */
	public String getUrl()
	{
		return url;
	}
	
	/**
	 *
	 */
	public boolean hasError()
	{
		return error;
	}
	/**
	 * 
	 */
	public void MarkError()
	{
		error = true;
	}
	
	
	
	/**
	 * @param string
	 */
	public void setExt(String ext)
	{
		this.ext = ext;
	}

	/**
	 * @param filename the filename to set
	 */
	public void setName(String name)
	{
		this.name = name;
		this.ext      = MediaDisposer.fileExt(name);
		this.type     = MediaDisposer.fileType(ext);
	}
	
	/**
	 * @param original the original to set
	 */
	public void setOriginal(String original) {
		this.original = original;
	}

	/**
	 * @param saveDir the saveDir to set
	 */
	public void setSaveDir(String saveDir) {
		this.saveDir = saveDir;
	}
	/**
	 * 
	 */
	public void setSize(int size)
	{
		this.size = size;
	}

	/**
	 * @param tag the tag to set
	 */
	public void setTag(String tag)
	{
		this.tag = tag;
	}

	/**
	 * @param title the title to set
	 */
	public void setTitle(String title)
	{
		this.title = title;
		//this.tag  = Tag.exactTag(title);
	}

	/**
	 * @param type the type to set
	 */
	public void setType(ETYPE type) 
	{
		this.type = type;
	}
	
	/**
	 * @param url the url to set
	 */
	public void setUrl(String url)
	{
		this.url  = url;
		this.name = URLUtils.file(url);
		this.ext  = MediaDisposer.fileExt(name);
		this.type = MediaDisposer.fileType(ext);
		this.mediaHash = URLUtils.hash(url);
	}

	/**
	 * ToString ..
	 */
	public String toString()
	{
		return url+":"+title;
	}
	
}
